package persistent.dao;

import java.util.List;

import model.TOption;
import model.TTitle;
import model.TitleBatch;
import model.VTitle;

/**
 * 题目信息处理业务接口
 * @author 徐震霖
 * @since 2019-02-21
 */
public interface ITitleDAO {
	
	/**
	 * 开启或关闭一个题目的反选（选项分值反过来）
	 * @param titleid 题目编号
	 * @param isReverse 是否开启反选（0为不开启反选，1为开启反选）
	 * @return 成功返回true，失败返回false
	 */
	public boolean enableOrDisEnableReverse(String titleid, int isReverse);

	/**
	 * 添加一个题目信息（添加题目信息的同时要添加选项信息）（原本旧的，题目选项一起添加的）
	 * @param title 题目信息对象
	 * @param options 选项信息对象列表
	 * @return 成功返回true，失败返回false
	 */
	//public boolean addTitle(TTitle title, List<TOption> options);
	
	/**
	 * 添加一个题目信息（添加题目信息的同时要添加选项信息）
	 * @param title 题目信息对象
	 * @param dimensionid 题目所属维度
	 * @return 成功返回true，失败返回false
	 */
	public boolean addTitle(TTitle title, int dimensionid);
	
	/**
	 * 添加一个选项信息（用于编辑是添加某题选项不够的情况）
	 * @param option 选项信息对象
	 * @return 成功返回true，失败返回false
	 */
	public boolean addOption(TOption option);
	
	/**
	 * 修改一个题目信息
	 * @param title 题目信息对象
	 * @return 成功返回true，失败返回false
	 */
	public boolean updateTitle(TTitle title);
	
	/**
	 * 修改一个题目选项信息
	 * @param option 题目选项信息对象
	 * @return 成功返回true，失败返回false
	 */
	public boolean updateOption(TOption option);
	
	/**
	 * 删除一个题目信息（删除题目信息时要先删除题目对应选项信息）
	 * @param title 题目信息编号
	 * @return 成功返回true，失败返回false
	 */
	public boolean deleteTitle(String titleid);
	
	/**
	 * 删除一个选项信息
	 * @param option 选项信息编号
	 * @return 成功返回true，失败返回false
	 */
	public boolean deleteOption(String optionid);
	
	/**
	 * 根据ID获得一个题目信息
	 * @param titleid 题目信息ID
	 * @return 成功返回一个题目信息对象，失败返回null
	 */
	public TTitle getTTitle(String titleid);
	
	/**
	 * 根据ID获得一个选项信息
	 * @param optionid 选项信息ID
	 * @return 成功返回一个选项信息对象，失败返回null
	 */
	public TOption getTOption(String optionid);
	
	/**
	 * 根据条件获得题目信息列表
	 * @param strWhere 查询条件
	 * @return 成功返回一个题目信息对象列表，失败返回null
	 */
	public List<VTitle> getTitles(String strWhere);
	
	/**
	 * 根据条件分页获得题目信息列表
	 * @param strWhere 查询条件
	 * @param currentPage 当前页
	 * @param pageSize 每页条数
	 * @return 成功返回一个题目信息对象列表，失败返回null
	 */
	public List<VTitle> getTitlesByPage(String strWhere, int currentPage, int pageSize);
	
	/**
	 * 根据条件获得选项信息对象列表
	 * @param strWhere 查询条件
	 * @return 成功返回一个选项信息对象列表，失败返回null
	 */
	public List<TOption> getOptions(String strWhere);
	
	/**
	 * 批量导入题目信息
	 * @param titleBatchs 题目和选项信息对象列表
	 * @return 成功返回null，失败返回List<TitleBatch>的错误对象信息列表
	 */
	public List<TitleBatch> batchImport(List<TitleBatch> titleBatchs);
	
}
